package com.linzm.leetcode.primary.exercises3_20230122;

import java.util.Arrays;

/**
 * @Author zimingl
 * @Date 2023/1/26 0:44
 * @Description: 删除某些元素后的数组均值
 */
public class Demo31_1619 {
    /**
     * 给你一个整数数组 arr ，请你删除最小 5% 的数字和最大 5% 的数字后，剩余数字的平均值。
     * 与 标准答案 误差在 10-5 的结果都被视为正确结果。
     * 输入：arr = [1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3]
     * 输出：2.00000
     * 解释：删除数组中最大和最小的元素后，所有元素都等于 2，所以平均值为 2 。
     */
    public static void main(String[] args) {
        int[] arr = {1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3};
        Demo31_1619 demo31_1619 = new Demo31_1619();
        double trimMean = demo31_1619.trimMean(arr);
        System.out.println(trimMean);
    }

    private double trimMean(int[] arr) {
        int n = arr.length / 20, end = arr.length - 1;
        Arrays.sort(arr);
        int[] ints = Arrays.copyOfRange(arr, n, arr.length - n);
        return Arrays.stream(ints).average().getAsDouble();
    }

    private double trimMean2(int[] arr) {
        int n = arr.length;
        Arrays.sort(arr);
        int sum = 0;
        for (int i = arr.length / 20; i < 19 * n /20; i++) {
            sum += arr[i];
        }
        return sum / (arr.length *0.9);
    }
}
